home *** CD-ROM | disk | FTP | other *** search
- // Copyright 2014 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
-
- // Custom binding for the webViewRequest API.
-
- var binding = require('binding').Binding.create('webViewRequest');
-
- var declarativeWebRequestSchema =
- requireNative('schema_registry').GetSchema('declarativeWebRequest');
- var utils = require('utils');
- var validate = require('schemaUtils').validate;
-
- binding.registerCustomHook(function(api) {
- var webViewRequest = api.compiledApi;
-
- // Returns the schema definition of type |typeId| defined in
- // |declarativeWebRequestScheme.types|.
- function getSchema(typeId) {
- return utils.lookup(declarativeWebRequestSchema.types,
- 'id',
- 'declarativeWebRequest.' + typeId);
- }
-
- // Helper function for the constructor of concrete datatypes of the
- // declarative webRequest API.
- // Makes sure that |this| contains the union of parameters and
- // {'instanceType': 'declarativeWebRequest.' + typeId} and validates the
- // generated union dictionary against the schema for |typeId|.
- function setupInstance(instance, parameters, typeId) {
- for (var key in parameters) {
- if ($Object.hasOwnProperty(parameters, key)) {
- instance[key] = parameters[key];
- }
- }
-
- instance.instanceType = 'declarativeWebRequest.' + typeId;
- var schema = getSchema(typeId);
- validate([instance], [schema]);
- }
-
- // Setup all data types for the declarative webRequest API from the schema.
- for (var i = 0; i < declarativeWebRequestSchema.types.length; ++i) {
- var typeSchema = declarativeWebRequestSchema.types[i];
- var typeId = typeSchema.id.replace('declarativeWebRequest.', '');
- var action = function(typeId) {
- return function(parameters) {
- setupInstance(this, parameters, typeId);
- };
- }(typeId);
- webViewRequest[typeId] = action;
- }
- });
-
- exports.binding = binding.generate();
-